perm filename A74.TEX[106,PHY] blob sn#807772 filedate 1985-09-20 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	\magnification\magstephalf
C00007 ENDMK
CāŠ—;
\magnification\magstephalf
\input macro.tex
\def\today{\ifcase\month\or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi
  \space\number\day, \number\year}
\baselineskip 14pt
\rm
\line{\sevenrm a74.tex[106,phy] \today\hfill}

%\smallskip
\halign{\qq\lft{\tt #}\cr
PROGRAM WORDCOUNT(INPUT,OUTPUT);\cr
CONST SENTINEL='ZZZZZZZZZZZZ';\cr
\qq\qq TABLESIZE=1000;\cr
%\noalign{\smallskip}
TYPE STRING12=PACKED ARRAY[1..12] OF CHAR;\cr
\qq PBOX=$\uparrow$BOX;\cr
\qq BOX=RECORD\cr
\qq\qq BEGIN\cr
\qq\qq WORD: STRING12;\cr
\qq\qq COUNT: INTEGER;\cr
\qq\qq LEFT,RIGHT: PBOX\cr
\qq\qq END;\cr
%\noalign{\smallskip}
VAR ROOT,R,Q: PBOX;\cr
\qq NEW: STRING12;\cr
PROCEDURE PRINTAT(X: PBOX);\cr
\qq BEGIN\cr
\qq IF X <> NIL THEN\cr
\qq WITH X$\uparrow$ DO\cr
\qq\qq BEGIN\cr
\qq\qq PRINTAT(LEFT);\cr
\qq\qq WRITELN(WORD,COUNT);\cr
\qq\qq PRINTAT(RIGHT);\cr
\qq\qq DISPOSE(X) (* OPTIONAL *)\cr
\qq\qq END\cr
\qq END;\cr
%\noalign{\smallskip}
BEGIN\cr
(* INITIALIZE *)\cr
NEW(ROOT);\cr
WITH ROOT$\uparrow$ DO\cr
\qq BEGIN\cr
\qq READ(WORD);\cr
\qq COUNT:=1;\cr
\qq LEFT:=NIL;\cr
\qq RIGHT:=NIL\cr
\qq END;\cr
%\noalign{\smallskip}
(* READ PHASE *)\cr
READ(NEW);\cr
WHILE NEW <> SENTINEL DO\cr
\qq BEGIN\cr
\qq (* LOCATE NEW IN TREE *)\cr
\qq P:=ROOT;\cr
\qq WHILE NEW <> P$\uparrow$.WORD DO\cr
\qq\qq\qq WITH P$\uparrow$ DO\cr
\qq\qq\qq IF NEW < WORD THEN\cr
\qq\qq\qq\qq BEGIN\cr
\qq\qq\qq\qq IF LEFT=NIL THEN\cr
\qq\qq\qq\qq\qq BEGIN\cr
\qq\qq\qq\qq\qq NEW(Q);\cr
\qq\qq\qq\qq\qq LEFT:=Q;\cr
\qq\qq\qq\qq\qq WITH Q DO\cr
\qq\qq\qq\qq\qq\qq BEGIN\cr
\qq\qq\qq\qq\qq\qq WORD:=NEW;\cr
\qq\qq\qq\qq\qq\qq COUNT:=0;\cr
\qq\qq\qq\qq\qq\qq LEFT:=NIL;\cr
\qq\qq\qq\qq\qq\qq RIGHT:=NIL\cr
\qq\qq\qq\qq\qq\qq END;\cr
\qq\qq\qq\qq\qq END;\cr
\qq\qq\qq\qq P:=LEFT\cr
\qq\qq\qq\qq END;\cr
\qq\qq\qq ELSE \cr
\qq\qq\qq\qq BEGIN\cr
\qq\qq\qq\qq IF RIGHT=NIL THEN\cr
\qq\qq\qq\qq\qq BEGIN\cr
\qq\qq\qq\qq\qq NEW(Q);\cr
\qq\qq\qq\qq\qq RIGHT:=Q;\cr
\qq\qq\qq\qq\qq WITH Q DO\cr
\qq\qq\qq\qq\qq\qq BEGIN\cr
\qq\qq\qq\qq\qq\qq WORD:=NEW;\cr
\qq\qq\qq\qq\qq\qq COUNT:=0;\cr
\qq\qq\qq\qq\qq\qq LEFT:=NIL;\cr
\qq\qq\qq\qq\qq\qq RIGHT:=NIL\cr
\qq\qq\qq\qq\qq\qq END;\cr
\qq\qq\qq\qq\qq END;\cr
\qq\qq\qq\qq P:=RIGHT\cr
\qq\qq\qq\qq END;\cr
\qq (* NEW=P$\uparrow$.WORD *)\cr
\qq P$\uparrow$.COUNT:=P$\uparrow$.COUNT+1;\cr
\qq READ(NEW);\cr
\qq END;\cr
%\noalign{\smallskip}
(* PRINT PHASE *)\cr
PRINTAT(ROOT)\cr
END.\cr}
\line{\copyright 1984 Robert W. Floyd\quad
First draft (not published) December 6, l980.\hfill}

\end